/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tramite.beans;

import cip.util.ControladorAbstracto;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.cip.esymons.general.be.Area;
import org.cip.esymons.tramite.bc.AreaDelegate;
import org.cip.esymons.tramite.bc.SecuenciaDocumentoFacade;
import org.cip.esymons.tramite.bc.SecuenciaDocumentoFacadeLocal;
import org.cip.esymons.tramite.bc.TipoDocumentoDelegate;
import org.cip.esymons.tramite.be.SecuenciaDocumento;
import org.cip.esymons.tramite.be.TipoDocumento;

public class TipoDocumentoController extends ControladorAbstracto {

    private TipoDocumentoDelegate delegado;
    @EJB
    private SecuenciaDocumentoFacadeLocal secuenciaFacade;
    private AreaDelegate areaDelegado;
    private List<TipoDocumento> tipoDocumentos;
    private List<TipoDocumento> tipoDocumentos2;
    private TipoDocumento tipoDoc;
    private TipoDocumento tipoSeleccionado;
    private int cert;
    private Integer numeracion;
    private Area area;
    private String desc;

    public TipoDocumentoController() {
        delegado = new TipoDocumentoDelegate();
        secuenciaFacade = new SecuenciaDocumentoFacade();
        areaDelegado = new AreaDelegate();
        desc = "";
        tipoSeleccionado = new TipoDocumento();
        tipoDocumentos = new ArrayList<TipoDocumento>();
        tipoDocumentos2 = new ArrayList<TipoDocumento>();
        listarTipoDocumentos();
    }

    public String getInicioCert() {
        area = areaDelegado.buscar("Tramite Documentario");
        return "";
    }

    public void setInicioCert(String s) {
    }

    public String grabarNumeracion() {
        numeracion--;
        SecuenciaDocumento secuencia = secuenciaFacade.buscarUltimoCert(tipoSeleccionado, area);
        Calendar fecha = Calendar.getInstance();
        Integer anio = fecha.get(Calendar.YEAR);
        if (area != null) {
            if (secuencia == null) {
                secuenciaFacade.create(new SecuenciaDocumento(new BigInteger(numeracion.toString()), anio, tipoSeleccionado, area));
            } else {
                secuencia.setSdoSecuencia(new BigInteger(numeracion.toString()));
                secuenciaFacade.edit(secuencia);
            }
            mostrarMensaje("", "Se guardo con exito la numeracion: " + numeracion.toString() + " para " + tipoSeleccionado.getTdoDesc(), FacesMessage.SEVERITY_INFO);
        } else {
            mostrarMensaje("", "No existe el Area Tramite Documentario, debe crearlo en el modulo de configuracion", FacesMessage.SEVERITY_ERROR);
        }
        numeracion=0;
        return "";
    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String valor) {
        this.desc = valor;
    }

    public TipoDocumento getTipoDoc() {
        return tipoDoc;
    }

    public void setTipoDoc(TipoDocumento tipoDoc) {
        this.tipoDoc = tipoDoc;
    }

    public List<TipoDocumento> getTipoDocumentos() {
        return tipoDocumentos;
    }

    public void setTipoDocumentos(List<TipoDocumento> tipoDocumentos) {
        this.tipoDocumentos = tipoDocumentos;
    }

    public SelectItem[] getTipoDocumentoCombo() {
        try {
            List<TipoDocumento> la = delegado.findAll();
            SelectItem[] select = new SelectItem[la.size()];
            int i = 0;
            for (TipoDocumento ev : la) {
                SelectItem item = new SelectItem(ev, ev.getTdoDesc());
                select[i++] = item;
            }
            return select;
        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            select[0] = new SelectItem(null, "No existen Tipos");
            return select;
        }
    }

    public SelectItem[] getCertificadosItems() {
        try {
            tipoDocumentos2 = new ArrayList<TipoDocumento>();
            tipoDoc = delegado.buscarXNombre("Certificado Habilidad Firma de Contrato de Obras Publicas");
            if (tipoDoc != null) {
                tipoDocumentos2.add(tipoDoc);
            }
            tipoDoc = null;
            tipoDoc = delegado.buscarXNombre("Certificado de Habilidad de Expediente de Construcción");
            if (tipoDoc != null) {
                tipoDocumentos2.add(tipoDoc);
            }
            tipoDoc = null;
            tipoDoc = delegado.buscarXNombre("Certificado de Habilidad Profesional");
            if (tipoDoc != null) {
                tipoDocumentos2.add(tipoDoc);
            }
            List<TipoDocumento> ltd = tipoDocumentos2;
            SelectItem[] select = new SelectItem[ltd.size()];
            int i = 0;
            for (TipoDocumento td : ltd) {
                SelectItem item = new SelectItem(td, td.getTdoDesc());
                select[i++] = item;
            }

            return select;

        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen Certificados");
            select[0] = item;
            return select;
        }
    }

    public SelectItem[] getTipoDocumentoPagoItems() {
        try {
            List<TipoDocumento> ltd = delegado.listarDocumentosPagoXIngreso();
            SelectItem[] select = new SelectItem[ltd.size()];
            int i = 0;
            for (TipoDocumento td : ltd) {
                SelectItem item = new SelectItem(td, td.getTdoDesc());
                select[i++] = item;
            }

            return select;

        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen Tipos de Documentos");
            select[0] = item;
            return select;
        }
    }

    public String nuevo() {
        tipoDoc = new TipoDocumento();
        return "nuevo";
    }

    public String grabar() {
        delegado.create(tipoDoc);
        return "buscar";
    }

    private void listarTipoDocumentos() {
        tipoDocumentos = delegado.buscarTipoDocumento(desc);
    }

    public String getInicio() {
        listarTipoDocumentos();
        return "";
    }

    public String buscar() {
        listarTipoDocumentos();
        return "";
    }

    public String actualizar() {
        delegado.edit(tipoDoc);
        return "buscar";
    }

    public TipoDocumento buscarXId(Long id) {
        try {
            return delegado.find(id);
        } catch (Exception e) {
            return null;
        }
    }

    public List<TipoDocumento> getTipoDocumentos2() {
        return tipoDocumentos2;
    }

    public void setTipoDocumentos2(List<TipoDocumento> tipoDocumentos2) {
        this.tipoDocumentos2 = tipoDocumentos2;
    }

    /**
     * @return the cert
     */
    public int getCert() {
        return cert;
    }

    /**
     * @param cert the cert to set
     */
    public void setCert(int cert) {
        this.cert = cert;
    }

    /**
     * @return the numeracion
     */
    public Integer getNumeracion() {
        return numeracion;
    }

    /**
     * @param numeracion the numeracion to set
     */
    public void setNumeracion(Integer numeracion) {
        this.numeracion = numeracion;
    }

    /**
     * @return the tipoSeleccionado
     */
    public TipoDocumento getTipoSeleccionado() {
        return tipoSeleccionado;
    }

    /**
     * @param tipoSeleccionado the tipoSeleccionado to set
     */
    public void setTipoSeleccionado(TipoDocumento tipoSeleccionado) {
        this.tipoSeleccionado = tipoSeleccionado;
    }
}
